<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<title>JFlex Ant Task</title>
</head>

<body>

<h2><a name="JFlex">JFlex Ant Task</a></h2>
<p>
 JFlex can be easily integrated with <a HREF="http://ant.apache.org/" 
 target="_top">Ant</a> build tool. 
 To use JFlex with Ant, simply copy JFlex.jar to <i>$ANT_HOME/lib/</i> directory.
</p>
<h3>Description</h3>
<p>
  The JFlex Ant Task invokes the <a HREF="http://jflex.de/" target="_top">JFlex</a> lexical 
  analyzer generator on a grammar file.
</p>
<p>
 To use the JFlex task, the following mLineNumber must be placed in the Ant build file:
</p>
<pre>&lt;taskdef classname=&quot;JFlex.anttask.JFlexTask&quot; name=&quot;jflex&quot; /&gt;</pre>

<p>
  The JFlex task requires the <i>file</i> attribute to be set to the source grammar file (*.flex).
  Unless the target directory is specified with the <i>destdir</i> option, 
  the generated class will be saved to the same directory where grammar file resides. 
  Like javac, the JFlex task creates subdirectories in <i>destdir</i> according to the 
  generated class package.
</p>
<p>
  This task only invokes JFlex if the grammar file is newer than the generated
  files.
</p>

<h3>Parameters</h3>
<table border="1" cellpadding="2" cellspacing="0" width="80%">
  <tr>
    <td valign="top"><b>Attribute</b></td>
    <td valign="top"><b>Description</b></td>
    <td align="center" valign="top"><b>Required</b></td>
    <td align="center" valign="top"><b>Default</b></td>
  </tr>
  <tr>
    <td valign="top">file="file"</td>
    <td valign="top">The grammar file to process.</td>
    <td valign="top" align="center">Yes</td>
    <td></td>
  </tr>
  <tr>
    <td valign="top">destdir="dir"</td>
    <td valign="top">
      The directory to write the generated files to.  If not set, the files
      are written to the directory containing the grammar file. Note that unlike 
      JFlex's "-d" command mLineNumber option, <i>destdir</i> causes the generated file to be written to
      {destdir}/<b>{package name}</b>. This behaviour is similar to <i>javac -d dir</i>.
    </td>
    <td valign="top" align="center">No</td>
    <td></td>
  </tr>
  <tr>
    <td valign="top">outdir="dir"</td>
    <td valign="top">
      The directory to write the generated files to.  If not set, the files
      are written to the directory containing the grammar file. This options works 
      exactly like JFlex's "-d" command mLineNumber option, it causes the output file to
      be written to <i>dir</i> regardless of the package name.
    </td>
    <td valign="top" align="center">No</td>
    <td></td>
  </tr>
  <tr>
    <td valign="top">verbose</td>
    <td valign="top">Display generation process messages.</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;off&quot;</td>
  </tr>
  <tr>
    <td valign="top">dump</td>
    <td valign="top">Dump character classes, NFA and DFA tables.</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;off&quot;</td>
  </tr>
  <tr>
    <td valign="top">time or<p>timeStatistics</td>
    <td valign="top">Display generation time statistics.</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;off&quot;</td>
  </tr>
  <tr>
    <td valign="top">nomin or<p>skipMinimization</td>
    <td valign="top">Skip minimization step.</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;off&quot;</td>
  </tr>
  <tr>
    <td valign="top">skel="file" or<p>skeleton="file"</td>
    <td valign="top">Use external skeleton file.</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;off&quot;</td>
  </tr>
  <tr>
    <td valign="top">dot or<p>generateDot</td>
    <td valign="top">Write graphviz .dot files for the generated automata (alpha).</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;off&quot;</td>
  </tr>
  <tr>
    <td valign="top">nobak</td>
    <td valign="top">Do not make a backup if the generated file exists.</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;off&quot;</td>
  </tr>
  <tr>
    <td valign="top">switch</td>
    <td valign="top">Use code generation method <i>switch</t>.</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;off&quot;</td>
  </tr>
  <tr>
    <td valign="top">table</td>
    <td valign="top">Use code generation method <i>table</t>.</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;off&quot;</td>
  </tr>
  <tr>
    <td valign="top">pack</td>
    <td valign="top">Use code generation method <i>pack</t>.</td>
    <td align="center" valign="top">No</td>
    <td align="center" valign="top">&quot;on&quot;</td>
  </tr>

</table>
<h3>Example</h3>
<blockquote><pre>
&lt;jflex
    file=&quot;src/parser/Parser.flex&quot;
    destdir=&quot;build/generated/&quot;
/&gt;
</pre></blockquote>
<p>
  JFlex generates the lexical analyzer for <tt>src/parser/Parser.flex</tt> and saves the result 
  to <tt>build/generated/parser/</tt>, providing <tt>Parser.flex</tt> declares to be in package <tt>parser</tt>.
</p>

<blockquote><pre>
&lt;jflex
    file=&quot;src/parser/Parser.flex&quot;
    destdir=&quot;build/generated/&quot;
/&gt;
&lt;javac
    srcdir=&quot;build/generated/&quot;
    destdir=&quot;build/classes/&quot;
/&gt;
</pre></blockquote>
<p>
 The same as above plus compile generated classes to <i>build/classes</i>
</p>
<hr>

</body>
</html>

